package com.spring.demo.repository.jpa;

import java.util.List;

import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import com.spring.demo.domain.User;

@Repository
public interface UserQueryRepository extends JpaBusinessRepository<User, Long>{

	@Query("select user from User user order user.id")
	public List<User> findAll();
	
	@Query("select user from User user where user.id = :userId")
	public User findOne(@Param("userId")Long id);
	
	/**
	 * And --- 等价于 SQL 中的 and 关键字，比如 findByUsernameAndPassword(String user, Striang pwd)；
     * Or --- 等价于 SQL 中的 or 关键字，比如 findByUsernameOrAddress(String user, String addr)；
     * Between --- 等价于 SQL 中的 between 关键字，比如 findBySalaryBetween(int max, int min)；
     * LessThan --- 等价于 SQL 中的 "<"，比如 findBySalaryLessThan(int max)；
     * GreaterThan --- 等价于 SQL 中的">"，比如 findBySalaryGreaterThan(int min)；
     * IsNull --- 等价于 SQL 中的 "is null"，比如 findByUsernameIsNull()；
     * IsNotNull --- 等价于 SQL 中的 "is not null"，比如 findByUsernameIsNotNull()；
     * NotNull --- 与 IsNotNull 等价；
     * Like --- 等价于 SQL 中的 "like"，比如 findByUsernameLike(String user)；
     * NotLike --- 等价于 SQL 中的 "not like"，比如 findByUsernameNotLike(String user)；
     * OrderBy --- 等价于 SQL 中的 "order by"，比如 findByUsernameOrderBySalaryAsc(String user)；
     * Not --- 等价于 SQL 中的 "！ ="，比如 findByUsernameNot(String user)；
     * In --- 等价于 SQL 中的 "in"，比如 findByUsernameIn(Collection<String> userList) ，方法的参数可以是 Collection 类型，也可以是数组或者不定长参数；
     * NotIn --- 等价于 SQL 中的 "not in"，比如 findByUsernameNotIn(Collection<String> userList) ，方法的参数可以是 Collection 类型，也可以是数组或者不定长参数；
	 */
	public User findByUserName(String userName);
	
	public User findByLoginName(String loginName);
	
	@Modifying
	@Query("update User user set user.userName = :userName where user.id = :userId")
	public int updateUserName(@Param("userId")Long id, @Param("userName")String userName);
	
	
}
